#ifndef LIST_H
#define LIST_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 列表结构体
// 只存储指针类型
typedef struct List {
    void **array;   // 存储元素的数组（void * 数组）
    int capacity;   // 列表容量
    int size;       // 列表大小
} List;

// 创建一个列表
List* create_list();

// 添加元素到末尾
int list_add(List *list, void *element);

// 根据索引获取元素
void* list_get(List *list, int index);

// 移除对应位置的元素，不释放内存
int list_remove(List *list, int index);

// 销毁列表，可选择释放元素内存
// 不销毁，传入NULL
void list_destroy(List *list, void (*free_func)(void*));

// 查找元素，返回第一个匹配元素的索引，如果未找到则返回 -1
int list_find_ptr(List *list, void *key_ptr);

#endif